package pck_tramitedocu.pck_src.pck_pojos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import pck_tramitedocu.pck_src.pck_utiles.Cls_Parametros;
import pck_tramitedocu.pck_src.pck_utiles.cls_utilitarios;

public class Cls_documento implements Serializable {

    private static final long serialVersionUID = 1L;
    private String tipo_documento;
    private long numero_documento;
    private long correlativo_emision_tipo_documento;
    private String anhio;
    private String cabecera;
    private String asunto;
    private String cuerpo;
    private String fecha_ceacion;
    private String fecha_respuesta;
    private ArrayList<Cls_documento_referencia> referencia;
    private ArrayList<Cls_documento_referencia> documentos_proyectos;
    private ArrayList<Cls_documento_destinatario> destinatarios;
    private ArrayList<Cls_Copia_Documento> con_copia_usuarios;
    private ArrayList<Cls_Unidad_Organizativa> codigo_directiva;
    private ArrayList<Cls_Articulo> articulos;
    private ArrayList<Cls_documento_extension> extensiones;
    private ArrayList<Cls_Visto> respuesta_vistos;
    private String opciones;
    private String firma;
    private boolean isProyectado;
    private String usuario_logueado;
    private String codigo_empresa;
    private Cls_Comision comision;
    private String codigo_directiva_pertenece;
    private String usuario_crea_documento;//Codigo del Usuario que crea el documento
    private String codigo_area_crea_documento;//Codigo del area donde se creo el documento
    private String historial;
    private String persona_emite_documento;
    private boolean isBorrador;
    private String tipo_proyeccion;

    public String getCodigo_area_crea_documento() {
        return codigo_area_crea_documento;
    }

    public void setCodigo_area_crea_documento(String codigo_area_crea_documento) {
        this.codigo_area_crea_documento = codigo_area_crea_documento;
    }

    public long getCorrelativo_emision_tipo_documento() {
        return correlativo_emision_tipo_documento;
    }

    public void setCorrelativo_emision_tipo_documento(long correlativo_emision_tipo_documento) {
        this.correlativo_emision_tipo_documento = correlativo_emision_tipo_documento;
    }

    public long getNumero_documento() {
        return numero_documento;
    }

    public void setNumero_documento(long numero_documento) {
        this.numero_documento = numero_documento;
    }

    public ArrayList<Cls_documento_referencia> getDocumentos_proyectos() {
        return documentos_proyectos;
    }

    public void setDocumentos_proyectos(ArrayList<Cls_documento_referencia> documentos_proyectos) {
        this.documentos_proyectos = documentos_proyectos;
    }

    public String getTipo_proyeccion() {
        return tipo_proyeccion;
    }

    public void setTipo_proyeccion(String tipo_proyeccion) {
        this.tipo_proyeccion = tipo_proyeccion;
    }

    public boolean isIsBorrador() {
        return isBorrador;
    }

    public void setIsBorrador(boolean isBorrador) {
        this.isBorrador = isBorrador;
    }

    public String getPersona_emite_documento() {
        /*
         * 39
         */ return this.persona_emite_documento;
    }

    public void setPersona_emite_documento(String persona_emite_documento) {
        /*
         * 43
         */ this.persona_emite_documento = persona_emite_documento;
    }

    public String getHistorial() {
        /*
         * 48
         */ return this.historial;
    }

    public void setHistorial(String historial) {
        /*
         * 52
         */ this.historial = historial;
    }

    public ArrayList<Cls_Visto> getRespuesta_vistos() {
        /*
         * 57
         */ return this.respuesta_vistos;
    }

    public void setRespuesta_vistos(ArrayList<Cls_Visto> respuesta_vistos) {
        /*
         * 61
         */ this.respuesta_vistos = respuesta_vistos;
    }

    public String getUsuario_crea_documento() {
        /*
         * 65
         */ return this.usuario_crea_documento;
    }

    public void setUsuario_crea_documento(String usuario_crea_documento) {
        /*
         * 69
         */ this.usuario_crea_documento = usuario_crea_documento;
    }

    public String getCodigo_directiva_pertenece() {
        /*
         * 74
         */ return this.codigo_directiva_pertenece;
    }

    public void setCodigo_directiva_pertenece(String codigo_directiva_pertenece) {
        /*
         * 78
         */ this.codigo_directiva_pertenece = codigo_directiva_pertenece;
    }

    public ArrayList<Cls_documento_extension> getExtensiones() {
        /*
         * 83
         */ return this.extensiones;
    }

    public void setExtensiones(ArrayList<Cls_documento_extension> extensiones) {
        /*
         * 86
         */ this.extensiones = extensiones;
    }

    public ArrayList<Cls_Articulo> getArticulos() {
        /*
         * 89
         */ return this.articulos;
    }

    public String getArticulosString() {
        /*
         * 92
         */ StringBuilder retorno = new StringBuilder();
        /*
         * 93
         */ for (Cls_Articulo articulo : this.articulos) {
            /*
             * 94
             */ retorno.append(articulo.getArticulo());
            /*
             * 95
             */ retorno.append("|$m$|");
        }
        /*
         * 97
         */ return retorno.toString();
    }

    public void setArticulos(ArrayList<Cls_Articulo> articulos) {
        /*
         * 101
         */ this.articulos = articulos;
    }

    public void setArticulosString(String[] articulos) {
        ArrayList articu = new ArrayList();
        for (String articulo : articulos) {
            articu.add(new Cls_Articulo("", articulo));
        }
        this.articulos = articu;
    }

    public Cls_Comision getComision() {
        /*
         * 112
         */ return this.comision;
    }

    public void setComision(Cls_Comision comision) {
        /*
         * 116
         */ this.comision = comision;
    }

    public String getCodigo_empresa() {
        /*
         * 120
         */ return this.codigo_empresa;
    }

    public void setCodigo_empresa(String codigo_empresa) {
        /*
         * 124
         */ this.codigo_empresa = codigo_empresa;
    }

    public String getUsuario_logueado() {
        /*
         * 128
         */ return this.usuario_logueado;
    }

    public void setUsuario_logueado(String usuario_logueado) {
        /*
         * 132
         */ this.usuario_logueado = usuario_logueado;
    }

    public boolean isIsProyectado() {
        /*
         * 138
         */ return this.isProyectado;
    }

    public void setIsProyectado(boolean isProyectado) {
        /*
         * 142
         */ this.isProyectado = isProyectado;
    }

    public String getCodigo_directivaString() {
        /*
         * 146
         */ StringBuilder destinatarios_ret = new StringBuilder();
        /*
         * 147
         */ int i = 1;
        /*
         * 148
         */ for (Cls_Unidad_Organizativa unidad : this.codigo_directiva) {
            /*
             * 149
             */ destinatarios_ret.append(unidad.getNombre());
        }
        /*
         * 151
         */ return destinatarios_ret.toString();
    }

    public ArrayList<Cls_Unidad_Organizativa> getCodigo_directiva() {
        /*
         * 154
         */ return this.codigo_directiva;
    }

    public void setCodigo_directiva(ArrayList<Cls_Unidad_Organizativa> array) {
        /*
         * 157
         */ this.codigo_directiva = array;
    }

    public void setCodigo_directiva(String[] array) {
        /*
         * 160
         */ ArrayList unidades = new ArrayList();
        /*
         * 161
         */ for (String xx : array) {
            /*
             * 162
             */ unidades.add(new Cls_Unidad_Organizativa(xx));
        }
        /*
         * 164
         */ this.codigo_directiva = unidades;
    }

    public String getFirma() {
        return this.firma;
    }

    public void setFirma(String firma) {
        this.firma = firma;
    }

    public String getOpciones() {
        return this.opciones;
    }

    public void setOpciones(String opciones) {
        this.opciones = opciones;
    }

    public String getFecha_respuesta() {
        return this.fecha_respuesta;
    }

    public void setFecha_respuesta(String fecha_respuesta) {
        try {
            if (fecha_respuesta.length() == 0) {
                this.fecha_respuesta = "0";
            } else if (fecha_respuesta.length() < 5) /*
             * 189
             */ {
                this.fecha_respuesta = fecha_respuesta;
            } else {
                this.fecha_respuesta = cls_utilitarios.cambiarOrdenFechaDeSqlParaGrilla(fecha_respuesta);
            }
        } catch (NullPointerException ex) {
            Logger.getLogger(Cls_documento.class.getName()).log(Level.SEVERE, null, ex);
            this.fecha_respuesta = "0";
        }
    }

    public void setFecha_respuestaHref(String fecha_respuesta) {
        this.fecha_respuesta = fecha_respuesta;
    }

    public ArrayList<Cls_documento_referencia> getReferencia() {
        return this.referencia;
    }

    public void setReferencia(ArrayList<Cls_documento_referencia> referencia) {
        this.referencia = referencia;
    }

    public String getCuerpo() {
        return this.cuerpo;
    }

    public void setCuerpo(String cuerpo) {
        this.cuerpo = cuerpo;
    }

    public String getAnhio() {
        return this.anhio;
    }

    public void setAnhio(String anhio) {
        this.anhio = anhio;
    }

    public String getAsunto() {
        return this.asunto;
    }

    public void setAsunto(String asunto) {
        this.asunto = asunto;
    }

    public String getCabecera() {
        return this.cabecera;
    }

    public void setCabecera(String cabecera) {
        this.cabecera = cabecera;
    }

    public ArrayList<Cls_documento_destinatario> getDestinatarios() {
        /*
         * 235
         */ return this.destinatarios;
    }

    public void setDestinatarios(ArrayList<Cls_documento_destinatario> destinatarios) {
        /*
         * 238
         */ this.destinatarios = destinatarios;
    }

    public String getDestinatariosString() {
        /*
         * 241
         */ StringBuilder destinatarios_ret = new StringBuilder();
        /*
         * 242
         */ if (this.destinatarios != null) {
            /*
             * 243
             */ for (Cls_documento_destinatario dest : this.destinatarios) {
                /*
                 * 244
                 */ destinatarios_ret.append(dest.getNombres());
            }
        }
        /*
         * 247
         */ return destinatarios_ret.toString();
    }

    public void setDestinatarios(String[] destinatarios) {
        /*
         * 250
         */ ArrayList destinatarios_arreglo = new ArrayList();
        /*
         * 251
         */ for (int i = 0; i < destinatarios.length; i++) {
            /*
             * 252
             */ destinatarios_arreglo.add(new Cls_documento_destinatario(destinatarios[i]));
        }
        /*
         * 254
         */ this.destinatarios = destinatarios_arreglo;
    }

    public String getCon_copia_usuariosString() {
        /*
         * 257
         */ StringBuilder destinatarios_copia = new StringBuilder();
        /*
         * 258
         */ for (Cls_Copia_Documento copias : this.con_copia_usuarios) {
            /*
             * 259
             */ destinatarios_copia.append(copias.getNombre());
        }
        /*
         * 261
         */ return destinatarios_copia.toString();
    }

    public void setCon_copia_usuarios(String[] con_copia_usuarios) {
        /*
         * 265
         */ ArrayList array_copia_destinatario = new ArrayList();
        /*
         * 266
         */ for (String copia_usuario : con_copia_usuarios) {
            /*
             * 267
             */ array_copia_destinatario.add(new Cls_Copia_Documento(copia_usuario));
        }
        /*
         * 269
         */ this.con_copia_usuarios = array_copia_destinatario;
    }

    public ArrayList<Cls_Copia_Documento> getCon_copia_usuarios() {
        /*
         * 272
         */ return this.con_copia_usuarios;
    }

    public void setCon_copia_usuarios(ArrayList<Cls_Copia_Documento> con_copia_usuarios) {
        /*
         * 276
         */ this.con_copia_usuarios = con_copia_usuarios;
    }

    public String getFecha_ceacion() {
        /*
         * 280
         */ return this.fecha_ceacion;
    }

    public void setFecha_ceacion(String fecha_ceacion) {
        /*
         * 284
         */ this.fecha_ceacion = cls_utilitarios.cambiarOrdenFechaDeSqlParaGrilla(fecha_ceacion);
    }

    public void setFecha_creacion(String fecha_ceacion) {
        /*
         * 287
         */ this.fecha_ceacion = fecha_ceacion;
    }
    
    public String getReferenciaString() {
        /*
         * 299
         */ StringBuilder destinatarios_ret = new StringBuilder();
        /*
         * 300
         */ for (Cls_documento_referencia ref : this.referencia) {
            /*
             * 301
             */ destinatarios_ret.append(ref.getTipo_documento());
        }
        /*
         * 303
         */ return destinatarios_ret.toString();
    }

    public void setReferencia(String[] referencias) {
        ArrayList referencias_arreglo = new ArrayList();
        for (int i = 0; i < referencias.length; i++) {
            referencias_arreglo.add(new Cls_documento_referencia(referencias[i]));
        }
        this.referencia = referencias_arreglo;
    }

    public String getTipo_documento() {
        return this.tipo_documento;
    }

    public void setTipo_documento(String tipo_documento) {
        this.tipo_documento = tipo_documento;
    }

    public Cls_documento() {
    }

    public Cls_documento(String tipo_documento, String cabecera, String asunto, int numero_documento, String fecha_ceacion, String anhio, ArrayList<Cls_documento_referencia> refencia, ArrayList<Cls_documento_destinatario> destinatarios) {
        this.tipo_documento = tipo_documento;
        this.cabecera = cabecera;
        this.asunto = asunto;
        this.numero_documento = numero_documento;
        this.fecha_ceacion = fecha_ceacion;
        this.anhio = anhio;
        this.referencia = refencia;
        this.destinatarios = destinatarios;
    }

    @Override
    public String toString() {
        return "Cls_documento{" + "tipo_documento=" + tipo_documento + "numero_documento=" + numero_documento + "correlativo_emision_tipo_documento=" + correlativo_emision_tipo_documento + "anhio=" + anhio + "cabecera=" + cabecera + "asunto=" + asunto + "cuerpo=" + cuerpo + "fecha_ceacion=" + fecha_ceacion + "fecha_respuesta=" + fecha_respuesta + "referencia=" + referencia + "documentos_proyectos=" + documentos_proyectos + "destinatarios=" + destinatarios + "con_copia_usuarios=" + con_copia_usuarios + "codigo_directiva=" + codigo_directiva + "articulos=" + articulos + "extensiones=" + extensiones + "respuesta_vistos=" + respuesta_vistos + "opciones=" + opciones + "firma=" + firma + "isProyectado=" + isProyectado + "usuario_logueado=" + usuario_logueado + "codigo_empresa=" + codigo_empresa + "comision=" + comision + "codigo_directiva_pertenece=" + codigo_directiva_pertenece + "usuario_crea_documento=" + usuario_crea_documento + "historial=" + historial + "persona_emite_documento=" + persona_emite_documento + "isBorrador=" + isBorrador + "tipo_proyeccion=" + tipo_proyeccion + '}';
    }

    public String obtenerCodigoConcatenado() {
        String codigo = getTipo_documento() + "-" + getNumero_documento() + "-" + getAnhio();
        return codigo;
    }

    public String obtenerCodigoConcatenadoRayita() {
        String codigo = getTipo_documento() + Cls_Parametros.CHARACTER_SEPARATOR_VERTICAL + getNumero_documento() + Cls_Parametros.CHARACTER_SEPARATOR_VERTICAL + getAnhio() + Cls_Parametros.CHARACTER_SEPARATOR_VERTICAL;
        return codigo;
    }

    public String obtenerTodosDestinatariosParaMensaje() {
        StringBuilder retorno = new StringBuilder();
        if (cls_utilitarios.areStringEquals(this.tipo_documento, Cls_Parametros.TIPO_DOCUMENTO_RESOLUCION_GERENCIA_GENERAL)
                || cls_utilitarios.areStringEquals(this.tipo_documento, Cls_Parametros.TIPO_DOCUMENTO_RESOLUCION_GERENCIA_ADM)
                || cls_utilitarios.areStringEquals(this.tipo_documento, Cls_Parametros.TIPO_DOCUMENTO_RESOLUCION_GERENCIA_COMERCIAL)) {
            return "";
        }else{
            for (Cls_documento_destinatario destinatarios : this.destinatarios) {
                retorno.append(Cls_Parametros.CHARACTER_ASTERISCO + destinatarios.getNombreMasCargoDestinatario() + "\n");
            }
            return retorno.toString();
        }
    }

    public String getFirmaFormateadaParaUsuario() {
        String data_usuario = this.getFirma();
        data_usuario = data_usuario.replace(Cls_Parametros.CHARACTER_SEPARATOR_VERTICAL, Cls_Parametros.CHARACTER_SEPARATOR);
        String data_usuario_array[] = data_usuario.split(Cls_Parametros.CHARACTER_SEPARATOR);
        return Cls_Parametros.CHARACTER_ASTERISCO + data_usuario_array[1] + data_usuario_array[2];
    }

    public boolean existeCodigoAreaEnVistoArray(String codigo_area) {
        for (Cls_Visto vistoBean : this.getRespuesta_vistos()) {
            if (cls_utilitarios.areStringEquals(codigo_area, vistoBean.getCodigo_area())
                    && cls_utilitarios.areNotStringEquals(codigo_area, this.getCodigo_area_crea_documento())) {
                return true;
            }
        }
        return false;
    }

    public int obtenerEstadoVistoEnVistoArray(String codigo_area) {
        for (Cls_Visto vistoBean : this.getRespuesta_vistos()) {
            if (cls_utilitarios.areStringEquals(codigo_area, vistoBean.getCodigo_area())
                    && cls_utilitarios.areNotStringEquals(codigo_area, this.getCodigo_area_crea_documento())) {
                if (cls_utilitarios.areStringEquals(vistoBean.getVisto(), Cls_Parametros.STRING_EMPTY)) {
                    return Cls_Parametros.CHECK_WITHOUT_RESPONSE;
                }
                return Integer.parseInt(vistoBean.getVisto());
            }
        }
        return Cls_Parametros.CHECK_NOT_EXISTS;
    }
}